package com.androidcentralmedias;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.androidcentralmedias.Client;
import com.androidcentralmedias.Server;
import android.app.Activity;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Handler;  
import android.os.Message;  

public class MainActivity extends Activity { 
	TextView mostrador;
	static ArrayList<String> filmes = new ArrayList<String>();  
	static ArrayList<String> nomes = new ArrayList<String>();  
	static String ip =new String();
	static String tipo =new String();
	static String type = "AND";
	static boolean parse_msg=false;
	static public String mensagem = new String();
	static public String ok_mensagem = new String();
	static int playlistIndex = 0;
	static int msg_id = 1;
	final Server server = new Server();
	Handler handler = new Handler(){
		  @Override
		  public void handleMessage(Message msg) {
			  //mostrador.setText(b.getString("teste"));
			  mostrador.setText(filmes.get(0));
			 // if (msg.getData().getString("teste").equals("Filmes")) 
			  
				  
		     }
		 }; 
		 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
    	WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
		int IP = wifiManager.getConnectionInfo().getIpAddress();
		ip = (( IP  ) & 0xFF ) + "." +	(( IP >> 8 ) & 0xFF ) + "." +(( IP >>  16 ) & 0xFF ) + "." +((  IP >> 24) & 0xFF );
		Log.d ("WIFI",ip);
        super.onCreate(icicle);
        setContentView(R.layout.main);
        new Thread(server).start();
        try {								
            // open the file for reading
            InputStream instream = openFileInput("enderecos.txt");
            // if file the available for reading
              // prepare the file for reading
              InputStreamReader inputreader = new InputStreamReader(instream);
              BufferedReader buffreader = new BufferedReader(inputreader);
              while(buffreader.ready()){
            	  SendSelect.enderecos.add(buffreader.readLine());
            	  SendSelect.ip.add(buffreader.readLine());
            	  SendSelect.canal.add(buffreader.readLine());
              }
			  instream.close();
          } catch (IOException e) {
			Log.d("UDP",e.toString());
		}
        try {								//Para ler o ultimo ip1 definido
            // open the file for reading
            InputStream instream = openFileInput("ip1.txt");
            // if file the available for reading
              // prepare the file for reading
              InputStreamReader inputreader = new InputStreamReader(instream);
              BufferedReader buffreader = new BufferedReader(inputreader);
			  Client.ip1 = buffreader.readLine();
			  Log.d("UDP",Client.ip1);
			  instream.close();
          } catch (java.io.FileNotFoundException e) {
        	  Client.ip1="192.168.1.100";
          } catch (IOException e) {
        	  Client.ip1="192.168.1.100";
			e.printStackTrace();
		}
        final Button mudarIpButton = (Button) findViewById(R.id.mudarIp);
        final Button filmesButton = (Button) findViewById(R.id.filmes);
        final Button musicasButton = (Button) findViewById(R.id.musicas);
        filmesButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	List.lista = "";
            	tipo = "filme";
            	Client.enviar("?filmes", MainActivity.type,1);
            	}});
        musicasButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	List.lista = "";
            	tipo = "musica";
            	Client.enviar("?musicas", MainActivity.type, 1);
            	}});
        mudarIpButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	 Intent i = new Intent(MainActivity.this, MudarIp.class);  
                 startActivity(i);  
            	}});
        	  new Thread(new Runnable() {   //Aqui esta eh a antiga funcao controlador(a funcao que comanda tudo)
        	boolean array=false;
        	boolean arraynomes=false;
        	int num;
        	public void run() {
        		
        		/*
        		// se vc nao tem WIFI
        		server.fila.add("?lista");
        		server.fila.add("Stranger Than Fiction.avi");
        		server.fila.add("?fim");
        		*/
        		while(true){
        			ok_mensagem = server.ok_message;
        			if (!server.fila.isEmpty()){
        				mensagem=(String)server.fila.get(0);
        				server.fila.remove(server.fila.get(0));
        				parse_msg = true;
        				if (array==true){
        					lerArray();
        				}
        				else if(arraynomes){
        					lerArrayNomes();
        				}
        				else{
        					lerPacote();
        				}
        			}
        			try{
    				   Thread.sleep(50);
				   }
    				catch (Exception e) {
        					e.printStackTrace();
					}
        		}
        	}
        	public void lerPacote(){					//essa funcao eh chamada quando o programa esta no modo "simples", ou seja esperando por um comando
        		if(mensagem.equals("?lista")){ //se receber a string !lista significa que as proximas Strings serao os arquivos da lista de filmes
        			array = true;
        			MainActivity.filmes.clear();
        			Log.d("UDP","---"+array);
        		}
        		else{ 
        			if(mensagem.equals("?nomes")){ //isso eh soh para testar a conexao
            			arraynomes = true;
            			MainActivity.nomes.clear();
            		}
        		}
        	}
        	public void lerArray(){					//nessa funçao ele pega os nomes dos arquivos coloca na list filmes da classe MainActivity
        		if(mensagem.equals("?fim")){		//se um dessas strings for !fim isso significa que a lista acabou e portanto o programa deve mostrar a lista
        			array=false;
        			Log.d("UDP","Abrindo lista");
        			startActivity(new Intent("android.intent.action.LISTVIEW"));
        		}
        		else{
        			Log.d("UDP",mensagem);
        		MainActivity.filmes.add(mensagem);  //coloca o arquivo na lista
        		}
        	}
        	public void lerArrayNomes(){					//nessa funcao ele pega os nomes dos arquivos coloca na list filmes da classe MainActivity
        		if(mensagem.equals("?fim")){		//se um dessas strings for !fim isso significa que a lista acabou e portanto o programa deve mostrar a lista
        			arraynomes=false;
        			startActivity(new Intent("android.intent.action.STREAMCONTROL"));
        		}
        		else{
        		num = SendSelect.canal.indexOf(mensagem);
        		if (num == -1){ //num =-1 se o canal que esta tocando nao exite na lista de canais do android
        			SendSelect.canal.add(mensagem);
        			SendSelect.ip.add("");
        			SendSelect.enderecos.add(mensagem);        			
        		}
        		MainActivity.nomes.add(SendSelect.enderecos.get(num));  //coloca o arquivo na lista
        		}
        	}
    }).start(); //aqui inicia a funcao q foi descrita acima
    }
    public void onResume(Bundle icicle){
    	WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
		int IP = wifiManager.getConnectionInfo().getIpAddress();
		ip = (( IP  ) & 0xFF ) + "." +	(( IP >> 8 ) & 0xFF ) + "." +(( IP >>  16 ) & 0xFF ) + "." +((  IP >> 24) & 0xFF );
		Log.d ("WIFI",ip);
    }
    public boolean onCreateOptionsMenu(Menu menu){
        super.onCreateOptionsMenu(menu);
        menu.add(0, 1,0, "Canais no ar");
        menu.add(0, 2,0, "Lista de filmes");
        return true;
    }
    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item)
    {
        super.onMenuItemSelected(featureId, item);
       
        switch(item.getItemId())
        {
            case 1:
            {
            	/*if (!StreamControl.enderecos.isEmpty()) startActivity(new Intent(this, StreamControl.class));
            	else Toast.makeText(getApplicationContext(), "Nao tem nenhum stream rodando", Toast.LENGTH_SHORT).show();*/
                Client.enviar("?show", MainActivity.type,1);
            	return true;
            }   
            case 2:
            {
            	if (!filmes.isEmpty()) startActivity(new Intent(this, List.class));
            	else Toast.makeText(getApplicationContext(), "Nao tem nenhum filme na lista", Toast.LENGTH_SHORT).show();
                return true;
            }  
        }
        return false;
    }  
}